#pragma once

#include <string>
#include <vector>
#include <chrono>

namespace El {
namespace Base {

// base64编码
std::string Base64Encode(const std::vector<unsigned char> &data);

// base64解码
std::vector<unsigned char> Base64Decode(const std::string &encoded_string);

// 将utc时间转换为字符串
std::string utcToString(uint32_t utc);

// 将系统时间转换为字符串
std::string utcToString(std::chrono::system_clock::time_point tp);

// 执行shell命令并返回执行结果
// @param cmd 要执行的shell命令
// @param output 命令的所有输出(包括标准输出和错误输出)
// @return true表示命令执行成功,false表示执行失败
bool ExecuteCommand(const std::string &cmd, std::string *output = nullptr);

// 打印当前线程的调用栈
void PrintStackTrace();

} // namespace Base
} // namespace El